package com.shujia.wyh.day01;

import com.shujia.wyh.utils.MySqlTool;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import java.util.UUID;

/*
    登录注册案例：
        1、注册账号
        2、登录账号



    注意事项：
        按照正确的思路编写代码后发现，当我输入了不正确的密码的时候，却也能登录进去
        原因是我输入的不正确密码字符串也被当作sql语法进行解析了。

        解决方案：将原本的先拼sql后解析sql的顺序变一下，变成先解析sql再拼接sql参数

    jdbc查询的另外一种写法：预编译写法（开发中常见的写法）

 */
public class JDBCTest6 {
    public static void main(String[] args) throws Exception {
        System.out.println("===================欢迎来到管磊婚介所===================");
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的用户名：");
        String username = sc.nextLine();
        System.out.println("请输入您的密码：");
        String password = sc.nextLine();

        //拿着用户输入的用户名和密码去数据库中找一找有没有这个用户
        //使用工具类获取与数据库的连接对象
//        Connection conn = MySqlTool.getConnection();



        //编写sql语句，进行查询
        //select id,username,password from users where username='xiaohu'  and password = '123456';
        System.out.println(password);
        //将来需要传参的地方使用问号占位
        String sql = "select username,password from users where username=? and password=? ";
        System.out.println(sql);


        Connection conn = MySqlTool.getConnection();
        //获取数据库的操作对象
        //第二种写法
        PreparedStatement preparedStatement = conn.prepareStatement(sql);

        //给问号占位符的部分进行传参
        preparedStatement.setString(1,username);
        preparedStatement.setString(2,password);
//        preparedStatement.setInt(1,1);

//        Statement stat = conn.createStatement();
//
//        ResultSet resultSet = stat.executeQuery(sql);

        //执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();


        boolean b = resultSet.next();
        if (b) {
            System.out.println("登录成功，欢迎来到管磊婚介所！！");
        } else {
            //如果b为false说明没有查询到对应的用户，需要进行注册
            System.out.println("未查询到该用户，请先进行注册（Y/N）");
            String choice = sc.nextLine();
            if ("Y".equals(choice)) {
                while (true) {
                    System.out.println("请输入您的用户名：");
                    String username2 = sc.nextLine();
                    System.out.println("请输入您的密码：");
                    String password2 = sc.nextLine();
                    System.out.println("请确认输入的密码：");
                    String password_again = sc.nextLine();
                    if (password_again.equals(password2)) {
                        //用户的id号是自动生成的，用户不需要去关心
                        //借助java提供的一个生成ID号的类：UUID
                        UUID uuid = UUID.randomUUID();
                        //为了避免UUID随机生成的编号相同，所以我们在生成的id号后面拼接一个当前的时间戳
                        String new_id = uuid + "-" + System.currentTimeMillis();
                        String sql2 = "insert into users(id,username,password) values(?,?,?)";
                        PreparedStatement preparedStatement1 = conn.prepareStatement(sql2);
                        preparedStatement1.setString(1,new_id);
                        preparedStatement1.setString(2,username2);
                        preparedStatement1.setString(3,password_again);
                        int count = preparedStatement1.executeUpdate();
                        System.out.println(count == 1 ? username2 + " 用户注册成功！！" : "注册失败！！！");
                        preparedStatement1.close();
                        break;
                    } else {
                        System.out.println("两次密码不一致，请重新输入！！");
                    }
                }

            }
        }


        preparedStatement.close();
        conn.close();


    }
}
